﻿using Dominio.Calificaciones.Servicios.Calificaciones;
using ExcellentProjectPlus.Dominio.Calificaciones.Entidades;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Transactions;

namespace Aplicacion.Calificaciones.Calificaciones
{
    public class ServicioDeGestionDeCalificaciones:IServicioDeGestionDeCalificaciones
    {
        #region Propiedades
        IServicioDeAdministracionDeCalificaciones _servicioDeAdministracionDeCalificaciones;
        #endregion

        #region Constructores
        public ServicioDeGestionDeCalificaciones(IServicioDeAdministracionDeCalificaciones servicioDeAdministracionDeCalificaciones)
        {
            _servicioDeAdministracionDeCalificaciones = servicioDeAdministracionDeCalificaciones;
        }
        #endregion

        public IEnumerable<Calificacion> ObtenerCalificaciones()
        {
            IEnumerable<Calificacion> resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadUncommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCalificaciones.ObtenerCalificaciones();
                transaccion.Complete();
            }

            return resultado;
        }

        public Calificacion ObtenerCalificacionPorId(int id)
        {
            Calificacion resultado = null;
            var trxOptions = new TransactionOptions();
            trxOptions.IsolationLevel = IsolationLevel.ReadCommitted;
            trxOptions.Timeout = TimeSpan.FromMinutes(2);
            using (var transaccion = new TransactionScope(TransactionScopeOption.RequiresNew, trxOptions))
            {
                resultado = _servicioDeAdministracionDeCalificaciones.ObtenerCalificacionPorId(id);
                transaccion.Complete();
            }

            return resultado;
        }

        public void AgregarCalificacion(Calificacion calificacion)
        {
            _servicioDeAdministracionDeCalificaciones.AgregarCalificacion(calificacion);
        }
        public void ModificarCalificacion(Calificacion calificacion)
        {
            _servicioDeAdministracionDeCalificaciones.ModificarCalificacion(calificacion);
        }
        public void EliminarCalificacion(Calificacion calificacion)
        {
            _servicioDeAdministracionDeCalificaciones.EliminarCalificacion(calificacion);
        }
    }
}
